print("==========函数==========")
"""
【语法】
def 函数名（参数列表）:
    函数体
    return 返回值


返回值类型：
1、默认不写的话，是返回None。在if判断中None相当于False，可以不写return。
2、返回自己写的内容


函数的说明：
使用多行注释，需要在函数内部、顶部第一行编写，pycharm会自动罗列出基本结构
在调用函数的地方，鼠标防到函数名上时，可以看到函数的说明



"""


def sumFun(a, b):
    """
    这是一个求和函数
    :param a:
    :param b:
    :return: 返回相加的值
    """
    sum = a + b
    return sum

# 鼠标放到函数名进行测试一下吧
print(sumFun(1, 2))


def myprint(str):
    print(str)
    return


myprint('哈哈哈哈')
myprint('哦哦')

a = 5
print(id(a))
a = 10  # 修改值后，a为一个新的对象
print(id(a))

la = [1, 2, 3]
print(id(la))
la[0] = 5  # 修改索引0的值为数字5，此时la还是同一个对象
print(id(la))

# 证明可变与不可变

print("==========函数传值==========")


def printme(name):
    print('我的名字是：', name)
    return


printme('小明')

print('------------------------------')


def changeme(mylist):
    mylist.append([4, 5, 6])
    print('函数内打印：', mylist)
    return


mylist = [1, 2, 3]
changeme(mylist)
print('函数wai打印：', mylist)

print("==========参数==========")
"""
必需参数
关键字参数
默认参数
不定长参数
"""

print('------------------------------：必须参数')


def bixu(str):
    print(str)
    return


# bixu()  # 不传值则报错
bixu(123)  # 传值，则输出
print('------------------------------：关键字参数')


def guanjianzi(name, age):
    print("姓名：", name)
    print("年龄：", age)
    return


guanjianzi(name='Tom', age=18)
guanjianzi(age=20, name='Joy')
print('------------------------------：默认参数')


def moren(name, age=18):
    print("姓名：", name)
    print("年龄：", age)
    return


moren(name='Tom', age=10)
moren(name='Joy')
print('------------------------------：不定长参数，一个*')

# 加了一个星号 * 的参数会以元组(tuple)的形式导入，存放所有未命名的变量参数。
'''
一个 *：用于解包元组或列表，将其中的元素作为单独的参数传递给函数
'''
def budingchang(age, *parm_tuple):
    print("age:", age)
    print(parm_tuple)
    return


budingchang(18, ['哈哈哈'])
budingchang(18, ('啊啊', '呵呵'))
budingchang(20)

print('------------------------------：不定长参数')


# 加了两个星号 ** 的参数会以字典的形式导入
'''
两个 *：用于解包可变数量的位置参数，将多余的参数收集到一个元组中
'''
def budingchang2(age, **parm_dict):
    print("age:", age)
    print(parm_dict)
    return


budingchang(18, '000')
budingchang(18, '111', '222')
budingchang(20)
